#include <iostream>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

void handler(int sig)
{
    cout << "I'm signal :" << sig << endl;
    // exit(0);
}

int main()
{
    pid_t id = fork();
    if (id == 0)
    {
        // 子进程
        while (1)
        {
            int a=11/0;
            cout << "I'm child process , my pid is " << getpid() << endl;
            sleep(1);
        }
    }

    // 父进程
    int status = 0;
    int n=waitpid(id, &status, 0);
    if(n==id)
    {
        cout<<"exit code:"<<((status>>8)&0xff)<<"code signal:"<<(status&0x7f)<<"core dump:"<<((status>>7)&1)<<endl;
    }
    

    // signal(SIGSEGV,handler);
    // int* p=nullptr;
    // *p=11;
    // return 0;

    // signal(SIGFPE,handler);
    // int a=11;
    // a/=0;
    // return 0;

    // sleep(1);
    // signal(2,handler);

    // kill(getpid(),2);
    return 0;
}